/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package persistencia;

import java.sql.Connection;
import java.util.Collection;
import modelo.DetalleFactura;
import modelo.Factura;
import modelo.Productos;

/**
 *
 * @author Felipe
 */
public class FacturaBean {

    private ProductoDAO prodDao;
    private DetalleFacturaDAO detFacDao;
    private FacturaDAO facDao;

    public FacturaBean(Connection conexion) {
        prodDao = new ProductoDAO();
        prodDao.setConexion(conexion);
        detFacDao = new DetalleFacturaDAO();
        detFacDao.setConexion(conexion);
        facDao = new FacturaDAO();
        facDao.setConexion(conexion);
    }

    public void ingresarFactura(FacturaDetalleComposite fdc) {
        int total = 0;
        fdc.getFactura().setCorrFactura(facDao.getCorrFac());
        int corrFac = fdc.getFactura().getCorrFactura();
        for (DetalleFactura de : fdc.getListaDetalle()) {
            de.setCorrFactura(corrFac);

            detFacDao.Insertar(de);
            total = total + (de.getCantidad() * de.getPrecio());
            System.out.println("subtotal: " + (de.getCantidad() * de.getPrecio()));
            this.SumarStock(de.getCodProducto(), de.getCantidad());
        }
        System.out.println("TOTAL BOLETA" + total);
        fdc.getFactura().setTotal(total);
        facDao.Insertar(fdc.getFactura());
    }

    private void restarStock(String codProducto, int cantidad) {
        Productos registro = prodDao.buscar(codProducto);
        prodDao.cambiarStock(codProducto, registro.getStockActual() - cantidad);
    }

    public void AnularFactura(String codigo) {

        Factura factura = facDao.buscar(codigo);
        Collection<DetalleFactura> detalle = detFacDao.buscarTodosPorCorrFac(factura.getCorrFactura());
        for (DetalleFactura de : detalle) {

            this.restarStock(de.getCodProducto(), de.getCantidad());
        }

        facDao.anularPorCorr(factura.getCorrFactura());
    }

    public void AnularFactura(int codigo) {

        Collection<DetalleFactura> detalle = detFacDao.buscarTodosPorCorrFac(codigo);
        for (DetalleFactura de : detalle) {
            this.SumarStock(de.getCodProducto(), de.getCantidad());
        }
        facDao.anularPorCorr(codigo);
    }

    private void SumarStock(String codProducto, int cantidad) {
        Productos registro = prodDao.buscar(codProducto);
        prodDao.cambiarStock(codProducto, registro.getStockActual() + cantidad);
    }

    public Factura BuscarPorCorr(int corrFac) {

        Factura fac = facDao.buscarPorCorr(corrFac);
        return fac;

    }

    public Factura BuscarPorCod(String strCod) {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    public Collection<Factura> buscarTodos() {

        Collection<Factura> bole = facDao.buscarTodos();

        return bole;
    }

    public Collection<Factura> buscarPorRut(int rut) {
        Collection<Factura> fac = facDao.buscarPorRut(rut);
        return fac;

    }
}
